// 需要提交到数据库的订单数据
import {reactive} from 'vue'

// 下单创建的数据
let order_data = reactive({
	address:[],
	order_time:'',
	query_time:'',
	pay_status:0,
	deliver_status:0,
	evaluate:false,
	waybill_No:'',
	refund_reason:'',
	merchant_no:'',
	merchant_refund_no:''
})

const db = wx.cloud.database()
const _ = db.command
class Pay{
	constructor(){}
	// 提交订单到数据库
	submit(order,address,order_time,query_time,merchant_no){
		order_data.address = address
		order_data.order_time = order_time
		order_data.query_time = query_time
		order_data.merchant_no = merchant_no
		// console.log("提交到数据库的数据",order_data);
		// console.log("商品数据",order);
		
		// 需要考虑购物车的数据，购物车批量下单
		let new_order = order.map(item=>{
			return {...item,...order_data}
		})
		// console.log("所有数据",new_order);
		return new Promise((resolve,reject)=>{
			new_order.forEach((item,index)=>{
				try{
					db.collection('order_data').add({
						data:item
					})
					// 遍历完所有上传之后，返回成功
					if(index == new_order.length - 1){
						resolve('success')
					}
				}catch(err){
					reject(err)
				}
			})
		})
	}
	
	// 支付成功或者取消支付更改订单字段为成功状态
	async changeStatus(value,merchant_no){
		const user = uni.getStorageSync('user_info')//取出本地缓存的用户信息
		if(value == 'success'){
			await db.collection('order_data').where({
				_openid:user.openid,
				merchant_no
			}).update({
				data:{pay_status:1}   // 支付状态成功
			})
			return
		}else{
			await db.collection('order_data').where({
				_openid:user.openid,
				merchant_no
			}).update({
				data:{pay_status:0}  // 待支付
			})
			return 
		}
	}

	// 支付成功：库存自减，售出自增
	setStock(order){
		return new Promise((resolve,reject)=>{
			// order 是数组，因为可能是购物车加入的
			order.forEach(async(item,index)=>{
				try{
					// 总库存的减少，售出的增多 
					await db.collection('goods').doc(item.goods_id).update({
						data:{
							stock:_.inc(-item.buy_amount),
							sold:_.inc(item.buy_amount)
						}
					})
					// 如果有规格：规格数据库 库存自减
					await db.collection('sku_data').where({
						sku_id:item.goods_id,
						'sku.attribute':_.eq(item.specs)
					}).update ({
						data:{'sku.$.stock':_.inc(item.buy_amount)
					}})
					
					if(index == order.length - 1){
						resolve('success')
					}
				}catch(err){
					reject(err)
				}
			})
		})
	}
	

	//删除购物车的已经下单的商品
	deleteCart(order){
		return new Promise((resolve,reject)=>{
			order.forEach(async(item,index)=>{
				try{
					await db.collection('shopping_cart').doc(item._id).remove()
					if(index == order.length - 1){
						resolve('success')
					}
				}catch(err){
					reject(err)
				}
			})
		})
	}

}

export {Pay}